<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>AtomicInitializer (Apache Commons Lang 3.3.2 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="AtomicInitializer (Apache Commons Lang 3.3.2 API)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/AtomicInitializer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicSafeInitializer.html" title="class in org.apache.commons.lang3.concurrent"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/lang3/concurrent/AtomicInitializer.html" target="_top">Frames</a></li>
<li><a href="AtomicInitializer.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.commons.lang3.concurrent</div>
<h2 title="Class AtomicInitializer" class="title">Class AtomicInitializer&lt;T&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.commons.lang3.concurrent.AtomicInitializer&lt;T&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl><dt><span class="strong">Type Parameters:</span></dt><dd><code>T</code> - the type of the object managed by this initializer class</dd></dl>
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentInitializer.html" title="interface in org.apache.commons.lang3.concurrent">ConcurrentInitializer</a>&lt;T&gt;</dd>
</dl>
<hr>
<br>
<pre>public abstract class <span class="strong">AtomicInitializer&lt;T&gt;</span>
extends <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentInitializer.html" title="interface in org.apache.commons.lang3.concurrent">ConcurrentInitializer</a>&lt;T&gt;</pre>
<div class="block"><p>
 A specialized implementation of the <code>ConcurrentInitializer</code> interface
 based on an <a href="http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic"><code>AtomicReference</code></a> variable.
 </p>
 <p>
 This class maintains a member field of type <code>AtomicReference</code>. It
 implements the following algorithm to create and initialize an object in its
 <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#get()"><code>get()</code></a> method:
 </p>
 <ul>
 <li>First it is checked whether the <code>AtomicReference</code> variable contains
 already a value. If this is the case, the value is directly returned.</li>
 <li>Otherwise the <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#initialize()"><code>initialize()</code></a> method is called. This method must be
 defined in concrete subclasses to actually create the managed object.</li>
 <li>After the object was created by <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#initialize()"><code>initialize()</code></a> it is checked
 whether the <code>AtomicReference</code> variable is still undefined. This has to
 be done because in the meantime another thread may have initialized the
 object. If the reference is still empty, the newly created object is stored
 in it and returned by this method.</li>
 <li>Otherwise the value stored in the <code>AtomicReference</code> is returned.</li>
 </ul>
 <p>
 Because atomic variables are used this class does not need any
 synchronization. So there is no danger of deadlock, and access to the managed
 object is efficient. However, if multiple threads access the <code>AtomicInitializer</code> object before it has been initialized almost at the same
 time, it can happen that <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#initialize()"><code>initialize()</code></a> is called multiple times. The
 algorithm outlined above guarantees that <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#get()"><code>get()</code></a> always returns the
 same object though.
 </p>
 <p>
 Compared with the <a href="../../../../../org/apache/commons/lang3/concurrent/LazyInitializer.html" title="class in org.apache.commons.lang3.concurrent"><code>LazyInitializer</code></a> class, this class can be more
 efficient because it does not need synchronization. The drawback is that the
 <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#initialize()"><code>initialize()</code></a> method can be called multiple times which may be
 problematic if the creation of the managed object is expensive. As a rule of
 thumb this initializer implementation is preferable if there are not too many
 threads involved and the probability that multiple threads access an
 uninitialized object is small. If there is high parallelism,
 <a href="../../../../../org/apache/commons/lang3/concurrent/LazyInitializer.html" title="class in org.apache.commons.lang3.concurrent"><code>LazyInitializer</code></a> is more appropriate.
 </p></div>
<dl><dt><span class="strong">Since:</span></dt>
  <dd>3.0</dd>
<dt><span class="strong">Version:</span></dt>
  <dd>$Id: AtomicInitializer.java 1583482 2014-03-31 22:54:57Z niallp $</dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#AtomicInitializer()">AtomicInitializer</a></strong>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html" title="type parameter in AtomicInitializer">T</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#get()">get</a></strong>()</code>
<div class="block">Returns the object managed by this initializer.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected abstract <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html" title="type parameter in AtomicInitializer">T</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#initialize()">initialize</a></strong>()</code>
<div class="block">Creates and initializes the object managed by this <code>AtomicInitializer</code>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="AtomicInitializer()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>AtomicInitializer</h4>
<pre>public&nbsp;AtomicInitializer()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="get()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>get</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html" title="type parameter in AtomicInitializer">T</a>&nbsp;get()
      throws <a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentException.html" title="class in org.apache.commons.lang3.concurrent">ConcurrentException</a></pre>
<div class="block">Returns the object managed by this initializer. The object is created if
 it is not available yet and stored internally. This method always returns
 the same object.</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentInitializer.html#get()">get</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentInitializer.html" title="interface in org.apache.commons.lang3.concurrent">ConcurrentInitializer</a>&lt;<a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html" title="type parameter in AtomicInitializer">T</a>&gt;</code></dd>
<dt><span class="strong">Returns:</span></dt><dd>the object created by this <code>AtomicInitializer</code></dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentException.html" title="class in org.apache.commons.lang3.concurrent">ConcurrentException</a></code> - if an error occurred during initialization of
 the object</dd></dl>
</li>
</ul>
<a name="initialize()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>initialize</h4>
<pre>protected abstract&nbsp;<a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html" title="type parameter in AtomicInitializer">T</a>&nbsp;initialize()
                         throws <a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentException.html" title="class in org.apache.commons.lang3.concurrent">ConcurrentException</a></pre>
<div class="block">Creates and initializes the object managed by this <code>AtomicInitializer</code>. This method is called by <a href="../../../../../org/apache/commons/lang3/concurrent/AtomicInitializer.html#get()"><code>get()</code></a> when the
 managed object is not available yet. An implementation can focus on the
 creation of the object. No synchronization is needed, as this is already
 handled by <code>get()</code>. As stated by the class comment, it is possible
 that this method is called multiple times.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the managed data object</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/lang3/concurrent/ConcurrentException.html" title="class in org.apache.commons.lang3.concurrent">ConcurrentException</a></code> - if an error occurs during object creation</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/AtomicInitializer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li><a href="../../../../../org/apache/commons/lang3/concurrent/AtomicSafeInitializer.html" title="class in org.apache.commons.lang3.concurrent"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/lang3/concurrent/AtomicInitializer.html" target="_top">Frames</a></li>
<li><a href="AtomicInitializer.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2001&#x2013;2014 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>
